
#ifndef TIPOSENEMIGOS_H_
#define TIPOSENEMIGOS_H_

#include "../../../Utils/GestionId.h"
#include "../../../Utils/YamlParser.h"

#include "../GestionTiposObjetos.h"
#include "Mono.h"
#include "Barril.h"
#include "Hongo.h"
#include "Tortuga.h"
#include "Bomba.h"
#include <algorithm>

class TipoBarril : TipoObjetoMovible {
	
	vector<infoAccion_t> accionesParticulares;
	
	public:
		
		TipoBarril(TipoEnemigo_y tipoEnemigo);
		void AsignarAEnemigo(Barril* barril);
};

class TipoMono : public TipoObjetoEstatico {
	
	vector<infoAccion_t> accionesParticulares;
	
	public:
		
		TipoMono(TipoEnemigo_y tipoEnemigo);
		void AsignarAEnemigo(Mono* mono);
		
};

class TipoHongo : public TipoObjetoMovible {
	
	vector<infoAccion_t> accionesParticulares;
	
	public:
	
		TipoHongo(TipoEnemigo_y tipoEnemigo);
		void AsignarAEnemigo(Hongo* hongo);
};

class TipoTortuga : public TipoObjetoMovible {
	
	vector<infoAccion_t> accionesParticulares;
	
	public:
	
		TipoTortuga(TipoEnemigo_y tipoEnemigo);
		void AsignarAEnemigo(Tortuga* tortuga);
};

class TipoBomba : public TipoObjetoMovible {
	
	vector<infoAccion_t> accionesParticulares;
	
	public:
	
		TipoBomba(TipoEnemigo_y tipoEnemigo);
		void AsignarAEnemigo(Bomba* bomba);
};

class GestionTiposEnemigos {

	static TipoMono* tipoMono;
	static TipoBarril* tipoBarril;
	static TipoHongo* tipoHongo;
	static TipoTortuga* tipoTortuga;
	static TipoBomba* tipoBomba;

	public:
		
		static void Inicializar(vector <TipoEnemigo_y> tiposEnemigos);
		static void AsignarTipoEnemigo(Mono* mono);
		static void AsignarTipoEnemigo(Barril* barril);
		static void AsignarTipoEnemigo(Hongo* hongo);
		static void AsignarTipoEnemigo(Tortuga* tortuga);
		static void AsignarTipoEnemigo(Bomba* bomba);
		static vector<string> getListaTipos();
};

#endif /* TIPOSENEMIGOS_H_ */
